interface KHTMLElement {
    /**
     * 获取控件对象
     * @param pluginType 控件类型
     * @returns 控件对象
     */
    getPlugin(pluginType?: any): KHTMLElement | null;
}
{
    Object.defineProperty(KHTMLElement.prototype, 'getPlugin', {
        writable: false,
        configurable: false,
        enumerable: false,
        value: function (this: KHTMLElement, pluginType?: any) {
            if (!pluginType) { pluginType = _CP_; }
            if (!U.isSubClass(_CP_, pluginType)) { pluginType = _CP_; }
            const ele = this.ele();
            if (ele) {
                if (ele.creator instanceof pluginType) {// 当前元素就是指定类型控件对象，则直接返回。
                    return this;
                }

                // 当前元素不是指定类型控件对象，则向上查找第一个是指定类型控件对象的元素。
                let ele_parent = ele.parentElement;
                while (ele_parent instanceof HTMLElement && ele_parent !== document.body) {
                    if (ele_parent.creator instanceof pluginType) {
                        return new KHTMLElement(ele_parent);
                    }
                    ele_parent = ele_parent.parentElement;
                }
            }

            // 不是指定类型控件
            return null;
        }
    });
}
